package com.sjh.lib_app.utils

import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager

/**
 * 动态改变桌面图标
 * @author renbing
 * @date 2020/12/02
 */

object ChangeLuncherUtils {

    /**
     * 动态更换桌面图标
     * 调用该方法时，需要从接口获取图标的标志位，标志位需要提前和后台约定好
     * 从外面传进来一个context获取packageManager操作
     * 再传一个icon的标识
     * 如果该icon的标识在manifest里面声明了，就切换，如果没有声明，就不做操作
     * 如果该icon的标识当前已经展示了，就不做任何操作
     * @param iconTag 图标的标识 来区分多个图标
     */
    fun changeLuncher(
        context: Context,
        iconTag: String = "normal"
    ) {
        val classes = arrayListOf<String>()
        //todo 添加节日入口  可能不止一两个 在这里加进来  注意约定的后缀
        classes.add("${context.packageName}.ui.SplashActivity_normal")
        classes.add("${context.packageName}.ui.SplashActivity_newYearDay")
        var cls = ""
        for (packageName in classes) {
            if (packageName.split("_")[1] == iconTag) {
                cls = packageName
                break
            }
        }
        if (cls.isEmpty()) return
        if ((getIconMod(context, cls) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED)) return
        classes.forEach { name ->
            if (getIconMod(context, name) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
                changeIconMod(context, name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED)
            }
        }
        changeIconMod(
            context, cls, PackageManager.COMPONENT_ENABLED_STATE_ENABLED
        )
    }

    private fun getIconMod(context: Context, name: String): Int {
        return context.packageManager.getComponentEnabledSetting(ComponentName(context, name))
    }

    /**
     * 设置是否显示该icon
     */
    private fun changeIconMod(context: Context, cls: String, mod: Int) {
        context.packageManager.setComponentEnabledSetting(
            ComponentName(context, cls),
            mod,
            PackageManager.DONT_KILL_APP
        )
    }
}